package ar.edu.caece.compiler.grammar.terminals;

import ar.edu.caece.compiler.model.Token;
import ar.edu.caece.compiler.grammar.Recognizer;
import ar.edu.caece.compiler.grammar.TokenRecognizer;
import ar.edu.caece.compiler.grammar.TokenVisitor;

public class FinArrayToken extends TokenRecognizer {

	public FinArrayToken(Token token) {
		super(token);
	}

	public static abstract class FinArrayTokenVisitor extends TokenVisitor {
		public abstract Recognizer finArrayCase(FinArrayToken llamador);
	}
	
	public static abstract class FinArrayChainVisitor extends FinArrayTokenVisitor {
		private TokenVisitor siguiente;
		protected FinArrayChainVisitor(TokenVisitor siguienteVisitor) {
			siguiente = siguienteVisitor;
		}
		
		public Recognizer defaultCase(TokenRecognizer llamador) throws Exception {
			siguiente.setInheretedAttributes(getAttributes());
			return llamador.execute(siguiente);
		}
	}

	@Override
	public Recognizer execute(TokenVisitor visitor) throws Exception {
		return (visitor instanceof FinArrayTokenVisitor)? ((FinArrayTokenVisitor) visitor).finArrayCase(this):
			visitor.defaultCase(this);
		
	}
}
